#include <stdio.h>
#include <stdlib.h>
#include <time.h>

// 生成测试数据文件
void generate_test_file(int item_count, const char* filename) {
    FILE *file = fopen(filename, "w");
    if (file == NULL) {
        printf("无法创建文件 %s\n", filename);
        return;
    }
    
    // 写入物品数量
    fprintf(file, "%d\n", item_count);
    
    // 生成物品数据
    for (int i = 0; i < item_count; i++) {
        int weight = rand() % 100 + 1;  // 1-100之间的随机整数
        double value = (rand() % 90001 + 10000) / 100.0;  // 100.00-1000.00之间的随机数
        fprintf(file, "%d %.2f\n", weight, value);
    }
    
    fclose(file);
    printf("已生成文件: %s (物品数量: %d)\n", filename, item_count);
}

int main() {
    printf("=== 0-1背包问题测试数据生成器 ===\n");
    
    // 设置随机种子
    srand(time(NULL));
    
    // 物品数量数组
    int item_counts[] = {1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 10000, 
                        20000, 40000, 80000, 160000, 320000};
    int num_item_counts = sizeof(item_counts) / sizeof(item_counts[0]);
    
    printf("开始生成测试数据文件...\n");
    printf("物品重量范围: 1-100\n");
    printf("物品价值范围: 100.00-1000.00\n");
    printf("将生成 %d 个数据文件\n\n", num_item_counts);
    
    // 为每个物品数量生成数据文件
    for (int i = 0; i < num_item_counts; i++) {
        char filename[100];
        sprintf(filename, "items_%d.txt", item_counts[i]);
        generate_test_file(item_counts[i], filename);
    }
    
    printf("\n数据生成完成！共生成 %d 个测试文件。\n", num_item_counts);
    printf("文件命名格式: items_[物品数量].txt\n");
    
    return 0;
}